// fileReader2.js
const http = require('http');
const fs = require('fs');
const path = require('path');

// 获取命令行参数
const args = process.argv.slice(2);
const fileName = args.length > 0 ? args[0] : 'fileReader2.js';

// 创建HTTP服务器
const server = http.createServer((req, res) => {
    // 只处理根路径的请求
    if (req.url === '/') {
        const filePath = path.join(__dirname, fileName);
        
        // 使用fs.open打开文件
        fs.open(filePath, 'r', (err, fd) => {
            if (err) {
                if (err.code === 'ENOENT') {
                    // 文件不存在
                    res.writeHead(404, { 'Content-Type': 'text/html; charset=utf-8' });
                    res.end(`<h1>错误：文件 "${fileName}" 不存在！</h1>`);
                } else {
                    // 其他错误
                    res.writeHead(500, { 'Content-Type': 'text/html; charset=utf-8' });
                    res.end(`<h1>服务器错误：${err.message}</h1>`);
                }
                return;
            }
            
            // 获取文件大小
            fs.fstat(fd, (err, stats) => {
                if (err) {
                    res.writeHead(500, { 'Content-Type': 'text/html; charset=utf-8' });
                    res.end(`<h1>获取文件信息错误：${err.message}</h1>`);
                    fs.close(fd, () => {}); // 关闭文件描述符
                    return;
                }
                
                const fileSize = stats.size;
                const buffer = Buffer.alloc(fileSize);
                
                // 使用fs.read读取文件内容
                fs.read(fd, buffer, 0, fileSize, 0, (err, bytesRead, buffer) => {
                    // 关闭文件描述符
                    fs.close(fd, (closeErr) => {
                        if (closeErr) {
                            console.error('关闭文件错误:', closeErr);
                        }
                    });
                    
                    if (err) {
                        res.writeHead(500, { 'Content-Type': 'text/html; charset=utf-8' });
                        res.end(`<h1>读取文件错误：${err.message}</h1>`);
                        return;
                    }
                    
                    // 成功读取文件，显示内容
                    const fileContent = buffer.toString('utf8');
                    res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
                    res.end(`
                        <!DOCTYPE html>
                        <html>
                        <head>
                            <title>文件内容查看器</title>
                            <style>
                                body { font-family: Arial, sans-serif; margin: 40px; }
                                h1 { color: #333; }
                                pre { 
                                    background: #f5f5f5; 
                                    padding: 20px; 
                                    border: 1px solid #ddd; 
                                    border-radius: 5px; 
                                    white-space: pre-wrap; 
                                    word-wrap: break-word;
                                }
                                .file-info { color: #666; margin-bottom: 20px; }
                            </style>
                        </head>
                        <body>
                            <h1>文件内容查看器</h1>
                            <div class="file-info">
                                <strong>文件名：</strong>${fileName}<br>
                                <strong>文件大小：</strong>${fileSize} 字节
                            </div>
                            <pre>${fileContent.replace(/</g, '&lt;').replace(/>/g, '&gt;')}</pre>
                        </body>
                        </html>
                    `);
                });
            });
        });
    } else {
        // 处理其他路径的请求
        res.writeHead(404, { 'Content-Type': 'text/html; charset=utf-8' });
        res.end('<h1>404 - 页面未找到</h1>');
    }
});

// 启动服务器，监听8081端口
server.listen(8081, () => {
    console.log('服务器已启动，正在监听 8081 端口...');
    console.log(`访问地址: http://localhost:8081`);
    console.log(`当前读取的文件: ${fileName}`);
});

// 处理服务器错误
server.on('error', (err) => {
    if (err.code === 'EADDRINUSE') {
        console.error('错误：8081 端口已被占用，请使用其他端口或关闭占用该端口的程序。');
    } else {
        console.error('服务器错误:', err);
    }
});

// 处理进程终止信号
process.on('SIGINT', () => {
    console.log('\n服务器正在关闭...');
    server.close(() => {
        console.log('服务器已关闭。');
        process.exit(0);
    });
});